package com.ruoyi.sale.service;

import java.util.List;

import com.ruoyi.sale.domain.*;
import com.ruoyi.sale.domain.ApprovalProcess;

/**
 * 销售计划Service接口
 * 
 * @author ruoyi
 * @date 2023-10-13
 */
public interface IPlanService 
{
    /**
     * 查询销售计划
     * 
     * @param id 销售计划主键
     * @return 销售计划
     */
    public Plan selectPlanById(Long id);

    /**
     * 查询销售计划列表
     * @param plan
     * @param flag 是否是在备货计划处查询销售计划
     * @return
     */
    public List<Plan> selectPlanList(Plan plan, Boolean flag);

    /**
     * 新增销售计划
     * 
     * @param plan 销售计划
     * @return 结果
     */
    public int insertPlan(Plan plan, String componentPath, Long userId);

    /**
     * 修改销售计划
     * 
     * @param plan 销售计划
     * @return 结果
     */
    public int updatePlan(Plan plan);

    /**
     * 批量删除销售计划
     * 
     * @param ids 需要删除的销售计划主键集合
     * @return 结果
     */
    public int deletePlanByIds(Long[] ids);

    /**
     * 删除销售计划信息
     * 
     * @param id 销售计划主键
     * @return 结果
     */
    public int deletePlanById(Long id);

    /**
     * 通过发货id来查询发货的产品
     * @param ids 发货id
     * @return 结果
     */
    public List<ShipmentsProduct> selectShipmentsProductById(Long[] ids);

    /**
     * 发起审核，修改成审核中
     * @param id
     * @return
     */
    public int updatePlanStatusById(Long id);

    /**
     * 查询要进行审批的人
     * @param userId
     * @param deptId
     * @param id
     * @return
     */
    public List<Plan> selectPostUserDept(Long userId,Long deptId,Long id);

    /**
     * 修改审批状态
     * @param approvalProcess
     * @return
     */
    public int updateStatus(ApprovalProcess approvalProcess);

    /**
     * 查询自己已审批的数据
     * @param plan
     * @return 结果
     */
    public List<Plan> selectPlanReviewed(Plan plan);

    /**
     * 查询自己已发起的数据
     * @param userId
     * @return
     */
    public List<Plan> selectPlanInitiated(Long userId);

    /**
     * 通过店铺查询关联了哪些数据
     * @param productAuth
     * @return
     */
    public List<ProductAuth> selectItemPlan(ProductAuth productAuth);

    /**
     * 通过关联商品查询数据
     * @param plan
     * @return
     */
    public List<ProductAuth> selectPairId(Plan plan);
    /**
     * 待我审核的销售计划
     * @param plan
     * @return 结果
     */
    List<Plan> getPlanWaitProcessList(Plan plan);
    /**
     * 撤回销售计划
     */
    int revokePlan(Plan plan, String nickname, Long userId, String componentPath);

    /**
     * 提前结束销售计划
     * @return
     */
    int endPlanById(Long planId, String detailId,Integer count);

    /**
     * 点击提前结束按钮的时候查询是否有关联的采购订单
     */
    List<String> SearchRelatedPurchaseOrders(String planNumber, String detailId);
}
